package top.goldenyear.porpoise.framework.security.config;

import java.util.Collections;
import java.util.List;
import lombok.Data;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.annotation.Inject;
import org.noear.solon.validation.annotation.NotEmpty;
import org.noear.solon.validation.annotation.NotNull;
import org.noear.solon.validation.annotation.Valid;

/**
 * @author airhead
 */
@Configuration
@Inject(value = "${porpoise.security}")
@Valid
@Data
public class SecurityProps {

  /** HTTP 请求时，访问令牌的请求 Header */
  @NotEmpty(message = "Token Header 不能为空")
  private String tokenHeader = "Authorization";

  /** mock 模式的开关 */
  @NotNull(message = "mock 模式的开关不能为空")
  private Boolean mockEnable = false;

  /** mock 模式的密钥 一定要配置密钥，保证安全性 */
  @NotEmpty(message = "mock 模式的密钥不能为空") // 这里设置了一个默认值，因为实际上只有 mockEnable 为 true 时才需要配置。
  private String mockSecret = "test";

  /** 免登录的 URL 列表 */
  private List<String> permitAllUrls = Collections.emptyList();

  /** PasswordEncoder 加密复杂度，越高开销越大 */
  private Integer passwordEncoderLength = 4;

  private CaptchaProps captcha;
}
